package com.bj58.mis.apm.server.statistics.service;

import com.bj58.mis.apm.server.core.common.result.Page;
import com.bj58.mis.apm.server.statistics.dto.cube.*;
import com.bj58.mis.apm.server.statistics.query.PageInfo;
import com.bj58.mis.apm.server.statistics.query.cube.CubeQuery;

import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;

/**
 * @author: zhangfx
 * @create: 2018-06-25 18:39
 **/
public interface CubeService {
    /**
     * 分页查询CubeInfo列表，查询当前用户有权限的Cube
     * @param currUser 当前用户OA账号
     * @param cubeQuery 查询条件
     * @param pageInfo 分页信息
     * @return
     */
    Page<CubeInfo> queryPage(@NotNull String currUser, @NotNull CubeQuery cubeQuery, @NotNull PageInfo pageInfo);

    /**
     * 根据id查询Cube
     * @param id
     * @return
     */
    CubeInfo get(@NotNull String id);

    /**
     * 根据cubeId查询Cube设计相关信息
     * @param cubeId
     * @return
     */
    CubeDesign getDesign(@NotNull String cubeId);


    /**
     * 根据cubeId查询Cube分区信息
     * @param cubeId
     * @return
     */
    List<Segment> getSegments(@NotNull String cubeId);

    /**
     * 根据cubeId查询Cube模型
     * @param cubeId
     * @return
     */
    Model getModel(@NotNull String cubeId);

    /**
     * 根据owner, projectId查询Cube统计信息
     * @param owner [required]
     * @param projectId 可选参数
     * @return
     */
    CubeStatistics queryStatistics(@NotNull String owner, String projectId);

    /**
     * 根据owner, projectId查询Cube纬度使用率最低TOP10!
     * @param owner
     * @param projectId
     * @return
     */
    List<Map<String,Object>> queryTop10LowestUsageColumn(@NotNull String owner, String projectId);

    /**
     * 根据owner, projectId查询Cube膨胀倍数TOP10!
     * @param owner
     * @param projectId
     * @return
     */
    List<Map<String,Object>> queryTop10SwellRatio(@NotNull String owner, String projectId);

    /**
     * 根据owner, projectId,startDate, endDate查询Cube查询次数TOP10
     * @param owner
     * @param projectId
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String,Object>> queryTop10MostUsedQuery(@NotNull String owner, String projectId, String startDate, String endDate);
    /**
     * 根据owner, projectId,startDate, endDate查询Cube慢查询TOP10
     * @param owner
     * @param projectId
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String,Object>> queryTop10SlowQuery(@NotNull String owner, String projectId, String startDate, String endDate);
    /**
     * 根据owner, projectId查询Cube构建时间TOP10
     * @param owner
     * @param projectId
     * @return
     */
    List<Map<String,Object>> queryTop10SlowBuild(@NotNull String owner, String projectId);
    /**
     * 根据owner, projectId查询Cube数据量占用TOP10!
     * @param owner
     * @param projectId
     * @return
     */
    List<Map<String,Object>> queryTop10DataSize(@NotNull String owner, String projectId);

    /**
     * 根据owner, projectId查询Cube膨胀率范围统计! 如果owner为空则查询所有Cube
     * @param owner
     * @param projectId
     * @return
     */
    List<Map<String,Object>> querySwellRangeStatistics(String owner, String projectId);

}
